package com.ygy.service.impl;

import com.alibaba.druid.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ygy.entity.Orders;
import com.ygy.entity.Products;
import com.ygy.entity.Users;
import com.ygy.entity.VO.UserOrderVO;
import com.ygy.entity.dto.OrderModel;
import com.ygy.mapper.OrdersMapper;
import com.ygy.mapper.ProductsMapper;
import com.ygy.mapper.UsersMapper;
import com.ygy.service.IOrdersService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ygy.utils.OrderNumberGenerator;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 订单表 服务实现类
 * </p>
 *
 * @author Ye
 * @since 2024-03-14
 */
@Service
public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements IOrdersService {


        @Autowired
        private UsersMapper usersMapper;

        @Autowired
        private OrdersMapper ordersMapper;

        @Autowired
        private ProductsMapper productsMapper;


    //
    public IPage<UserOrderVO> getUserOrders(Integer userId, Integer pageNum,Integer pageSize){

         Users users = usersMapper.selectById(userId);
         if (users==null){
             return new Page<>(pageNum,pageSize);
//             return Collections.emptyList();//这个返回的是什么?
         }

         //条件构造器,用户不为空则获取该用户购买的的所有订单
        QueryWrapper<Orders> BuyAllOrder = new QueryWrapper<>();
         //用户不为空则获取该用户的所有购买订单
        BuyAllOrder.eq("user_id",userId); //
        //创建分页查询对象
        Page<Orders> page = new Page<>(pageNum, pageSize);
        //查询用户购买订单
        IPage<Orders> ordersPage = ordersMapper.selectPage(page,BuyAllOrder);






//        List<Orders> orders = list(allOrder);//list(allOrder)方法能够直接返回结果列表

         List<UserOrderVO> userOrderVOList = new ArrayList<>();//存到vo里面

        //orders 是包含所有符合条件的订单对象的列表，而 order 是在循环中每次迭代时当前处理的单个订单对象。
         for (Orders order : ordersPage.getRecords()){
             UserOrderVO vo = new UserOrderVO();
                // 复制相同名称的属性
                BeanUtils.copyProperties(order, vo);
                vo.setUsername(users.getUsername());
                vo.setPicture(order.getPicture());
                vo.setProductName(order.getProductName());


                /**
                * 还有简单写法直接赋值共有属性
                 *  BeanUtils.copyProperties(order, vo); // 复制共有属性
                 *         // 手动设置 UserOrderVO 中特有的属性，如 userId 和 username
                 *         // 这些属性在 Orders 中可能不存在，或者名称不同
                 *         // 你需要根据实际情况来获取这些值
                 * */
                userOrderVOList.add(vo);
         }

        // 创建一个新的分页对象，用于存放 UserOrderVO 类型的记录
        Page<UserOrderVO> userOrderVOPage = new Page<>(ordersPage.getCurrent(), ordersPage.getSize(), ordersPage.getTotal());
        userOrderVOPage.setRecords(userOrderVOList);

        return userOrderVOPage;

    }


    //卖出订单
    public IPage<UserOrderVO> getsellOrder(Integer userId, Integer pageNum,Integer pageSize){

        Users users = usersMapper.selectById(userId);
        if (users==null){
            return new Page<>(pageNum,pageSize);
//             return Collections.emptyList();//这个返回的是什么?
        }

        //条件构造器,用户不为空则获取该用户购买的的所有订单
        QueryWrapper<Orders> BuyAllOrder = new QueryWrapper<>();
        //用户不为空则获取该用户的所有购买订单
        BuyAllOrder.eq("sell_id",userId); //
        //创建分页查询对象
        Page<Orders> page = new Page<>(pageNum, pageSize);
        //查询用户购买订单
        IPage<Orders> ordersPage = ordersMapper.selectPage(page,BuyAllOrder);


        //查询用户卖出的订单（订单表字段叫sell_id代表卖出用户的ID）
//        QueryWrapper<Orders> sellOrderWrapper = new QueryWrapper<>();
//        sellOrderWrapper.eq("sell_id", userId);
//        IPage<Orders> sellOrdersPage = ordersMapper.selectPage(page, sellOrderWrapper);



//        List<Orders> orders = list(allOrder);//list(allOrder)方法能够直接返回结果列表

        List<UserOrderVO> userOrderVOList = new ArrayList<>();//存到vo里面

        //orders 是包含所有符合条件的订单对象的列表，而 order 是在循环中每次迭代时当前处理的单个订单对象。
        for (Orders order : ordersPage.getRecords()){
            UserOrderVO vo = new UserOrderVO();
            // 复制相同名称的属性
            BeanUtils.copyProperties(order, vo);
            vo.setUsername(users.getUsername());
            vo.setPicture(order.getPicture());
            vo.setProductName(order.getProductName());


            /**
             * 还有简单写法直接赋值共有属性
             *  BeanUtils.copyProperties(order, vo); // 复制共有属性
             *         // 手动设置 UserOrderVO 中特有的属性，如 userId 和 username
             *         // 这些属性在 Orders 中可能不存在，或者名称不同
             *         // 你需要根据实际情况来获取这些值
             * */
            userOrderVOList.add(vo);
        }

        // 创建一个新的分页对象，用于存放 UserOrderVO 类型的记录
        Page<UserOrderVO> userOrderVOPage = new Page<>(ordersPage.getCurrent(), ordersPage.getSize(), ordersPage.getTotal());
        userOrderVOPage.setRecords(userOrderVOList);

        return userOrderVOPage;

    }



}
